deploy: Bump the mtime on ostree/deploy after deployments finish
authorColin Walters <walters@verbum.org>
Wed, 2 Mar 2016 21:26:09 +0000 (16:26 -0500)
committerColin Walters <walters@verbum.org>
Thu, 3 Mar 2016 13:52:42 +0000 (08:52 -0500)
This allows other processes (e.g. rpm-ostreed) to monitor for external
changes (e.g. if someone does `ostree admin undeploy`) in a relatively
sane fashion.

Specifically, I'm trying to fix:
https://github.com/projectatomic/rpm-ostree/issues/220

src/libostree/ostree-sysroot-deploy.c
tests/admin-test.sh

index aa0349512dbbca2943c103b238576c5484b95bdc..b4f7cd27d278000f9f9f96c099a6de575ac56fbf 100644 (file)
@@ -1855,6 +1855,13 @@ ostree_sysroot_write_deployments (OstreeSysroot     *self,
                                 requires_new_bootversion ? "yes" : "no",
                                 new_deployments->len - self->deployments->len);
 
+  /* Allow other systems to monitor for changes */
+  if (utimensat (self->sysroot_fd, "ostree/deploy", NULL, 0) < 0)
+    {
+      glnx_set_prefix_error_from_errno (error, "%s", "futimens");
+      goto out;
+    }
+
   /* Now reload from disk */
   if (!ostree_sysroot_load (self, cancellable, error))
     {
index c60962b14d66cdb04d61ea9e0814c7251438aa3e..2d80de239ed607567a709bcb2c4e158d43354c74 100755 (executable)
@@ -27,11 +27,14 @@ function validate_bootloader() {
      fi)
 }
 
+orig_mtime=$(stat -c '%.Y' sysroot/ostree/deploy)
 ${CMD_PREFIX} ostree --repo=sysroot/ostree/repo pull-local --remote=testos testos-repo testos/buildmaster/x86_64-runtime
 rev=$(${CMD_PREFIX} ostree --repo=sysroot/ostree/repo rev-parse testos/buildmaster/x86_64-runtime)
 export rev
 # This initial deployment gets kicked off with some kernel arguments 
 ${CMD_PREFIX} ostree admin deploy --karg=root=LABEL=MOO --karg=quiet --os=testos testos:testos/buildmaster/x86_64-runtime
+new_mtime=$(stat -c '%.Y' sysroot/ostree/deploy)
+assert_not_streq "${orig_mtime}" "${new_mtime}"
 ${CMD_PREFIX} ostree admin status | tee status.txt
 validate_bootloader
 
@@ -56,7 +59,10 @@ ${CMD_PREFIX} ostree admin status
 
 echo "ok layout"
 
+orig_mtime=$(stat -c '%.Y' sysroot/ostree/deploy)
 ${CMD_PREFIX} ostree admin deploy --os=testos testos:testos/buildmaster/x86_64-runtime
+new_mtime=$(stat -c '%.Y' sysroot/ostree/deploy)
+assert_not_streq "${orig_mtime}" "${new_mtime}"
 # Need a new bootversion, sine we now have two deployments
 assert_has_dir sysroot/boot/loader.0
 assert_not_has_dir sysroot/boot/loader.1